home *** CD-ROM | disk | FTP | other *** search
- ;******************************************
- ;* CONTROL M A N A G E R *
- ;******************************************
-
- INCLUDE Library.Txt
-
- ;-------------------------------
- ; *** External Definition ***
- ;-------------------------------
-
- XDEF InstalControl
- XDEF ExecControl
- XDEF HiliteAllControls
-
- ;-------------------------------
- ; Control Record
- ;-------------------------------
-
- ;ControlRecord = Record { 41 bytes}
- ;{ 0} nextControl : ControlHandle
- ;{ 4} contrlOwner : GrafPtr
- ;{ 8} contrlRect : Rect
- ;{ 16} contrlVis : Byte
- ;{ 17} contrlHilite : Byte
- ;{ 18} contrlValue : INTEGER
- ;{ 20} contrlMin : INTEGER
- ;{ 22} contrlMax : INTEGER
- ;{ 24} contrlDefProc : DEFfunHandle
- ;{ 28} contrlData : Handle
- ;{ 32} contrlAction : ProcPtr
- ;{ 36} contrlrfCon : LongInt
- ;{ 40} contrlTitle : String
-
- ;-------------------------------
- ; Control AuxRecord
- ;-------------------------------
-
- ;ControlAuxRecord = Record { 6 bytes}
- ;{ 0} contrlID : INTEGER
- ;{ 2} contrlProc : ProcPtr
-
- ;------------------------------------------------------------------------------
- ;FUNCTION InstalControl( cntrlID:INTEGER;cntrlProc:ProcPtr;
- ; whichWindow:WindowPtr);INTEGER;
- ;------------------------------------------------------------------------------
-
- ;-------------------------------
- ; Parameters
- ;-------------------------------
-
- cntrlProc EQU 12
- cntrlID EQU 16
- whichWindow EQU 8
-
- ;-------------------------------
- ; Local Variables
- ;-------------------------------
-
- error EQU -2
- newContrl EQU -6
-
- ;-------------------------------
-
- InstalControl
- LINK A6,#-6 ;
- MOVEM.L A2-A4/D3-D7,-(SP) ;
- MOVE.W #noErr,error(A6) ;
- SUBQ.L #4,SP ;
- MOVE.W cntrlID(A6),-(SP) ;the control ID
- MOVE.L whichWindow(A6),-(SP) ;
- _GetNewControl ;get it from
- MOVE.L (SP)+,A3 ;resource file
- MOVE.L A3,newContrl(A6) ;
- MOVE.W #nilHandleErr,error(A6);
- CMPA.L #NIL,A3 ;can't get it ?
- BEQ @0 ;go @0
- MOVEQ #SizeCtrlAuxRec,D0 ;create a new
- _NewHandle ;Cntl AuxRec
- BNE @1 ;if we can't, go @1
- MOVE.L newContrl(A6),A3 ;
- MOVE.L (A3),A3 ;
- MOVE.L A0,contrlrfCon(A3) ;we replace the
- MOVE.L (A0),A0 ;cntl refcon with
- MOVE.W cntrlID(A6),contrlID(A0) ;our AuxRec
- MOVE.L cntrlProc(A6),contrlProc(A0) ;and we save
- MOVE.W #noErr,error(A6) ;in it the cntl ID
- BRA @0 ;and the Cntlproc
- @1
- MOVE.L newContrl(A6),-(SP) ;
- _DisposControl ;
- @0
- MOVE.W error(A6),D0 ;
- MOVEM.L (SP)+,A2-A4/D3-D7 ;
- UNLK A6 ;
- MOVE.L (SP)+,A0 ;
- ADD.L #10,SP ;
- MOVE.W D0,(SP) ;
- JMP (A0) ;
-
- ;------------------------------------------------------------------------------
- ;PROCEDURE ExecControl(theControl:ControlHandle);
- ;------------------------------------------------------------------------------
-
- ;-------------------------------
- ; Parameters
- ;-------------------------------
-
- theControl EQU 8
-
- ;-------------------------------
-
- ExecControl
- LINK A6,#0 ;
- MOVEM.L A2-A4/D3-D7,-(SP) ;
- MOVE.L theControl(A6),A1 ;
- MOVE.L (A1),A1 ;
- MOVEA.L contrlrfCon(A1),A1 ;
- CMPA.L #NIL,A1 ;
- BEQ @0 ;
- MOVEA.L (A1),A1 ;
- MOVEA.L contrlProc(A1),A1 ;we run the
- MOVE.L theControl(A6),-(SP) ;cntlProc (if one)
- JSR (A1) ;and we return
- @0 ;
- MOVEM.L (SP)+,A2-A4/D3-D7 ;
- UNLK A6 ;
- MOVE.L (SP)+,A0 ;
- ADD.L #4,SP ;
- JMP (A0) ;
-
- ;------------------------------------------------------------------------------
- ;PROCEDURE HiliteAllControls(HiliteState:INTEGER;whichWindow:WindowPtr);
- ;------------------------------------------------------------------------------
-
- ;-------------------------------
- ; Parameters
- ;-------------------------------
-
- HiliteState EQU 12
-
- ;-------------------------------
- ; Local Variables
- ;-------------------------------
-
- CntrlHdl EQU -4
-
- ;-------------------------------
-
- HiliteAllControls
- LINK A6,#-4 ;
- MOVEM.L A2-A4/D3-D7,-(SP) ;
- MOVE.L whichWindow(A6),A1 ;
- MOVE.L wControlList(A1),A3 ;
- CMPA.L #NIL,A3 ;
- BEQ @0 ;
- @1
- MOVE.L A3,CntrlHdl(A6) ;
- MOVE.L (A3),A3 ;
- CMPI.L #-1,contrlrfCon(A3) ;
- BEQ @2 ;
- MOVE.L CntrlHdl(A6),-(SP) ;
- MOVE.W HiliteState(A6),-(SP) ;
- _HiliteControl ;
- @2
- MOVE.L CntrlHdl(A6),A3 ;
- MOVEA.L (A3),A3 ;
- MOVE.L nextControl(A3),A3 ;
- CMPA.L #NIL,A3 ;
- BNE @1 ;
- @0
- MOVEM.L (SP)+,A2-A4/D3-D7 ;
- UNLK A6 ;
- MOVE.L (SP)+,A0 ;
- ADD.L #6,SP ;
- JMP (A0) ;
-
- END